二叉树的定义
我们先简单理解一下树,树就是N个结点的有限集。在任意一颗非空树中:有且仅有一个特定的称为根(Root)的结点。
二叉树是另一种树型结构,它的特点是每个结点至多只有两颗子树,所以二叉树中不存在度大于2的结点,并且,二叉树的子树有左右之分,其次序不能颠倒。两个结点共同的根节点叫做他们的双亲结点。
二叉树的结构体定义如下:
typedef char Data_Type;
typedef struct BTNode
{
Data_Type data;
struct BTNode * LeftNode;
struct BTNode * RightNode;
}BTNode,*pBTNode;
所以二叉树每个结点都有一个data用来保存数据,还有两个指针,分别指向左右子树的根节点。
具体结构如下图:
二叉树的创建
将一个字符串或者数组创建为二叉树形式,下面以字符串为例子:
void CreateBinTree(BTNode** pRoot,char* str,int size,int* index)
{
BTNode* pNewNode = NULL;
if(*index < size && '#'!=str[*index])
{
pNewNode = BuyBTNode();
pNewNode->data = str[*index];
*pRoot = pNewNode;
(*index)++;
CreateBinTree(&(*pRoot)->LeftNode,str,size,index);
(*index)++;
CreateBinTree(&(*pRoot)->RightNode,str,size,index);
}
}
/
char str[]="ABD###CE##F";
pBTNode pRoot;
int index = 0;
CreateBinTree(&pRoot,str,11,&index);
上面的方法是字符串以递增的顺序传参,用递归的方法,以前序遍历的顺序(下面的代码会详细讲解前序遍历),将字符串中每一个字母添加到二叉树中去,”#“号是为了让增加停下,构造二叉树的具体形状。具体递归结束后二叉树如下图: